package br.com.delta.DAO;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import br.com.delta.interfaces.Persistencia;
import br.com.delta.modelo.Usuario;
import br.com.delta.util.DataBaseHelper;

public class UsuarioDAO extends DataBaseHelper implements Persistencia {
	private static final String NOME_TABELA = "usuario";

	public UsuarioDAO(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public Object buscar(long id) {
		// TODO Auto-generated method stub
		try {
			String where = "_id_usuario = ?";
			String idUsuario = String.valueOf(id);
			String[] whereArgs = new String[] { idUsuario };

			Cursor c = db.query(NOME_TABELA, new String[] { "_id_usuario", "nome", "email", "cod_usuario", "senha" }, where, whereArgs, null, null,
					null);

			boolean encontrou = c.moveToFirst();
			Usuario usuario = new Usuario();
			if (encontrou) {
				// Recupera os indices das colunas
				int idxId = c.getColumnIndex("_id_usuario");
				int idxNome = c.getColumnIndex("nome");
				int idxEmail = c.getColumnIndex("email");
				int idxSenha = c.getColumnIndex("senha");
				int idxCodUsuario = c.getColumnIndex("cod_usuario");

				usuario.setIdUsuario(c.getInt(idxId));
				usuario.setNome(c.getString(idxNome));
				usuario.setEmail(c.getString(idxEmail));
				usuario.setCodUsuario(c.getString(idxCodUsuario));
				usuario.setSenha(c.getString(idxSenha));

			}
			return usuario;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(NOME_TABELA, e.toString());
		} finally {
			fechar();
		}

		return null;
	}

	public Usuario buscar(Usuario objUsuario) {
		// TODO Auto-generated method stub
		try {
			String where = "cod_usuario = ?";
			String codUsuario = objUsuario.getCodUsuario();
			String[] whereArgs = new String[] { codUsuario };

			Cursor c = db.query(NOME_TABELA, new String[] { "_id_usuario", "nome", "email", "cod_usuario", "senha" }, where, whereArgs, null, null,
					null);

			boolean encontrou = c.moveToFirst();
			Usuario usuario = new Usuario();
			if (encontrou) {
				// Recupera os indices das colunas
				int idxId = c.getColumnIndex("_id_usuario");
				int idxNome = c.getColumnIndex("nome");
				int idxEmail = c.getColumnIndex("email");
				int idxSenha = c.getColumnIndex("senha");
				int idxCodUsuario = c.getColumnIndex("cod_usuario");

				usuario.setIdUsuario(c.getInt(idxId));
				usuario.setNome(c.getString(idxNome));
				usuario.setEmail(c.getString(idxEmail));
				usuario.setCodUsuario(c.getString(idxCodUsuario));
				usuario.setSenha(c.getString(idxSenha));

			}
			return usuario;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(NOME_TABELA, e.toString());
		} finally {
			fechar();
		}

		return null;
	}

	public List<Usuario> listarTodos() {
		// TODO Auto-generated method stub
		try {

			Cursor c = db.query(NOME_TABELA, new String[] { "_id_usuario", "nome", "email", "cod_usuario", "senha" }, null, null, null, null, null);

			List<Usuario> usuarios = new ArrayList<Usuario>();
			if (c.moveToFirst()) {
				// Recupera os indices das colunas
				int idxId = c.getColumnIndex("_id_usuario");
				int idxNome = c.getColumnIndex("nome");
				int idxEmail = c.getColumnIndex("email");
				int idxSenha = c.getColumnIndex("senha");
				int idxCodUsuario = c.getColumnIndex("cod_usuario");

				do {
					Usuario usuario = new Usuario();
					usuario.setIdUsuario(c.getInt(idxId));
					usuario.setNome(c.getString(idxNome));
					usuario.setEmail(c.getString(idxEmail));
					usuario.setCodUsuario(c.getString(idxCodUsuario));
					usuario.setSenha(c.getString(idxSenha));
					usuarios.add(usuario);

				} while (c.moveToNext());

			}
			return usuarios;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(NOME_TABELA, e.toString());
		} finally {
			fechar();
		}

		return null;
	}

	public long salvar(Object o) {
		long id = 0;
		try {
			id = ((Usuario) o).getIdUsuario();
			if (id != 0) {
				atualizar(o);

			} else {
				id = inserir(o);
			}

		} catch (SQLiteException e) {
			Log.e(NOME_TABELA, "Erro ao salvar" + e.toString());
		}
		return id;
	}

	public int atualizar(Object o) {
		// TODO Auto-generated method stub
		ContentValues values = new ContentValues();
		values.put("nome", ((Usuario) o).getNome());
		values.put("email", ((Usuario) o).getEmail());
		values.put("usuario", ((Usuario) o).getCodUsuario());
		values.put("senha", ((Usuario) o).getSenha());
		String _id = String.valueOf(((Usuario) o).getIdUsuario());
		String where = "_id_usuario = ?";
		String[] whereArgs = new String[] { _id };
		return db.update(NOME_TABELA, values, where, whereArgs);

	}

	public int deletar(Object o) {
		// TODO Auto-generated method stub

		String where = "_id_usuario = ?";
		String _id = String.valueOf(((Usuario) o).getIdUsuario());
		String[] whereArgs = new String[] { _id };
		return db.delete(NOME_TABELA, where, whereArgs);
	}

	public long inserir(Object o) {
		// TODO Auto-generated method stub
		ContentValues values = new ContentValues();
		values.put("nome", ((Usuario) o).getNome());
		values.put("email", ((Usuario) o).getEmail());
		values.put("cod_usuario", ((Usuario) o).getCodUsuario());
		values.put("senha", ((Usuario) o).getSenha());

		return db.insert(NOME_TABELA, "", values);
	}

	public void fechar() {
		// fecha o banco
		if (db != null) {
			db.close();
		}
	}

}
